@微光
2年前 提问
1个回答

普通用户如何防范缓冲区溢出

安全侠
2年前
官方采纳

普通用户防范缓冲区溢出攻击的措施有以下这些:

  • 强制写正确的代码的方法。只要在所有拷贝数据的地方进行数据长度和有效性的检查,确保目标缓冲旦中数据不越界并有效,则就可以避免缓冲区溢出,更不可能使程序跳转到恶意代码上。

  • 通过操作系统使得缓冲区不可执行,从而阻止攻击者殖入攻击代码。通过使被攻击程序的数据段地址空间不可执行,从商使得攻击者不可能执行被植入被攻击程序输入缓冲区的代码,这种技术被称为缓冲区不可执行技术。

  • 改进C语言函数库。C语言中存在缓冲区溢出攻击隐患的系统匾数有很多。例如gets(),sprintf(),strcpy(),strcat(),fscanf(),scanf(),vsprintf()等。可以开发出更安全的封装了若干己知易受堆栈溢出攻击的岸函数。

  • 使堆栈向高地址方向增长。使用的机器堆栈压入数据时向高地址方向前进,那么无论缓冲区如何溢出,都不可能覆盖低地址处的函数返回地址指针,也就避免了缓冲区溢出攻击。但是这种方法仍然无法防范利用堆和静态数据段的缓冲区进行溢出的攻击。

  • 在程序指针失效前进行完整性检查。原理是在每次在程序指针被引用之前先检测该指针是否己被恶意改动过,如果发现被改动,程序就拒绝执行。

  • 利用编译器将静态数据段中的函数地址指针存放地址和其他数据的存放地址分离。